import { reactive, toRefs, computed } from "vue"
import { onLoad } from "@dcloudio/uni-app";
import { LoginStore } from "@/store/modules/login";
const uniIdCo = uniCloud.importObject("uni-id-co", { customUI: true })
import config from "@/config/config"
/**
 * @description  手机一键登录逻辑封装
 * @param rules 表单校验规则
 * */
export const useUniverify = (rules) => {
	const state = reactive({
		uniIdRedirectUrl: '', //注册前所在的页面地址
		verifyStyleCode: null,
		//一键登录页面样式参数配置
		univerifyStyle: {
			"fullScreen": true, // 是否全屏显示，true表示全屏模式，false表示非全屏模式，默认值为false。
			"backgroundColor": "#ffffff", // 授权页面背景颜色，默认值：#ffffff
			"buttons": { // 自定义登录按钮
				"iconWidth": "45px", // 图标宽度（高度等比例缩放） 默认值：45px
				"list": []
			},
			"privacyTerms": {
				"defaultCheckBoxState": false, // 条款勾选框初始状态 默认值： true
				"textColor": "#BBBBBB", // 文字颜色 默认值：#BBBBBB
				"termsColor": "#5496E3", //  协议文字颜色 默认值： #5496E3
				"prefix": "我已阅读并同意", // 条款前的文案 默认值：“我已阅读并同意”
				"suffix": "并使用本机号码登录", // 条款后的文案 默认值：“并使用本机号码登录”
				"privacyItems": []
			},
			"authButton": {
				"normalColor": "#465CFF", // 授权按钮正常状态背景颜色 默认值：#3479f5  
				"highlightColor": "#2861c5", // 授权按钮按下状态背景颜色 默认值：#2861c5（仅ios支持）  
				"disabledColor": "#73aaf5", // 授权按钮不可点击时背景颜色 默认值：#73aaf5（仅ios支持）  
				"textColor": "#ffffff", // 授权按钮文字颜色 默认值：#ffffff  
				"title": "本机号码一键登录", // 授权按钮文案 默认值：“本机号码一键登录”  
				"borderRadius": "24px" // 授权按钮圆角 默认值："24px" （按钮高度的一半）
			},
		}
	});
	// * 隐私协议
	const agreements = computed(() => {
		if (!config.agreements) return []
		let { serviceUrl, privacyUrl } = config.agreements
		return [{
				url: serviceUrl,
				title: "用户服务协议"
			},
			{
				url: privacyUrl,
				title: "隐私政策条款"
			}
		]
	})
	// 如果配置的有登录 那就把用户协议添加进去
	onLoad(async (e) => {
		if (config.loginTypes.includes('univerify')) {
			state.univerifyStyle.privacyTerms.privacyItems = agreements.value
		}
		if (e.uniIdRedirectUrl) {
			state.uniIdRedirectUrl = decodeURIComponent(e.uniIdRedirectUrl)
		}
		// #ifdef MP-WEIXIN
		if (getCurrentPages().length === 1) {
			uni.hideHomeButton()
			console.log('已隐藏：返回首页按钮');
		}
		// #endif
	})


	// 登录事件
	const univerifyLogin = async () => {
		//检查当前环境是否支持这种登录方式
		// #ifdef APP
		let isAppExist = true
		await new Promise((callback) => {
			plus.oauth.getServices(oauthServices => {
				let index = oauthServices.findIndex(e => e.id == 'univerify')
				if (index != -1) {
					isAppExist = oauthServices[index].nativeClient
					callback()
				} else {
					return uni.showToast({
						title: '当前设备环境暂不支持此登录，请选择其他登录方式',
						icon: 'none',
						duration: 3000
					});
				}
			}, err => {
				throw new Error('获取服务供应商失败：' + JSON.stringify(err))
			})
		})
		// #endif

		// 如果是H5端就直接提示不支持
		if (
			// #ifdef APP
			!isAppExist
			// #endif
			//非app端使用了，app特有登录方式
			// #ifndef APP
			["univerify", "apple"].includes('univerify')
			// #endif
		) {
			return uni.showToast({
				title: '当前设备不支持此登录，请选择其他登录方式',
				icon: 'none',
				duration: 3000
			});
		}

		// 调用预登录方法
		let univerifyManager = uni.getUniverifyManager()
		univerifyManager.preLogin()
		// 调用一键登录弹框
		return univerifyManager.login({
			univerifyStyle: state.univerifyStyle,
			success: res => {
				login(res.authResult, 'univerify')
			},
			fail(err) {
				console.log(err)
				switch (true) {
					// 未开通
					case err.code == 1000:
						uni.showModal({
							title: `登录失败`,
							content: `${err.errMsg}，错误码：${err.code}\n开通指南：https://ask.dcloud.net.cn/article/37965`,
						});
						break;
						// 预登陆失败（注意手机欠费也会造成预登陆失败）
					case err.code == 30005:
						uni.showModal({
							showCancel: false,
							title: `预登录失败`,
							content: `${err.errMsg}`
						});
						break;
				}
			},
		})
	}

	//联网验证登录
	const login = (params) => {
		uniIdCo.loginByUniverify({ ...params, inviteCode: 'TVGQSY' }).then(async res => {
				// uni.showToast({
				//     title: '登录成功',
				//     icon: 'none',
				//     duration: 2000
				// });

				// 登录成功的状态
				state.verifyStyleCode = res.errCode
				// 用于登录成功时需要配置的逻辑（如存储信息，记录设备，记录登录日志）
				const LoginState = LoginStore()
				LoginState.loginSuccess({ ...res, toastText: '登录成功', uniIdRedirectUrl: state.uniIdRedirectUrl })
			})
			.catch(e => {
				console.log(e);
				uni.showModal({
					content: e.errMsg,
					confirmText: "知道了",
					showCancel: false,
					success: function(res) {
						if (res.confirm) uni.closeAuthView()
					}
				});
			})
			.finally(e => {
				if (state.verifyStyleCode == 0) {
					setTimeout(() => {
						uni.closeAuthView()
						uni.hideLoading()
					}, 1000);
				}
			})
	}
	return {
		...toRefs(state),
		univerifyLogin
	};
};